//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//
//typedef struct Node
//{
//    char    telno[9];
//    int     times;
//    struct  Node* next;
//} Node;
//
//
//void process(char telno1[9], char telno2[255])
//{
//    int i = 0, j = 0;
//    while(telno2[i] != '\n' && i < 255)
//    {
//        if(j == 3)
//        {
//            telno1[j++] = '-';
//        }
//        else
//        {
//            if(telno2[i] >= '0' && telno2[i] <= '9')
//                telno1[j++] = telno2[i];
//            else if(telno2[i] >= 'A' && telno2[i] <= 'C')
//                telno1[j++] = '2';
//            else if(telno2[i] >= 'D' && telno2[i] <= 'F')
//                telno1[j++] = '3';
//            else if(telno2[i] >= 'G' && telno2[i] <= 'I')
//                telno1[j++] = '4';
//            else if(telno2[i] >= 'J' && telno2[i] <= 'L')
//                telno1[j++] = '5';
//            else if(telno2[i] >= 'M' && telno2[i] <= 'O')
//                telno1[j++] = '6';
//            else if(telno2[i] >= 'P' && telno2[i] <= 'S')
//                telno1[j++] = '7';
//            else if(telno2[i] >= 'T' && telno2[i] <= 'V')
//                telno1[j++] = '8';
//            else if(telno2[i] >= 'W' && telno2[i] <= 'Y')
//                telno1[j++] = '9';
//            else
//                ;
//            i++;
//        }
//    }
//    telno1[8] = '\0';
//}
//
//Node* findstr(Node* head, char telno[9])
//{
//    Node* p = head;
//
//    for(p = head; p != NULL; p = p->next)
//    {
//        if(strcmp(p->telno, telno) == 0)
//            return p;
//    }
//    return NULL;
//}
//
//void sortlink(Node** head)
//{
//    Node *pre = NULL, *s = NULL, *p = NULL;
//    if(*head == NULL || (*head) ->next == NULL)
//        return;
//
//    s = (*head)->next;
//    (*head)->next = NULL;
//
//    while(s != NULL)
//    {
//        for(pre = *head, p = pre;
//                p != NULL && strcmp(p->telno, s->telno) < 0;
//                pre = p, p = p->next)
//
//        {
//        }
//        if(p == *head)
//        {
//            *head = s;
//            s = s->next;
//            (*head)->next = p;
//        }
//        else
//        {
//            pre->next = s;
//            s = s->next;
//            pre->next->next = p;
//        }
//    }
//
//}
//
//void show(Node* head)
//{
//    Node* p = head;
//    Node* pre = NULL;
//
//    for(p = head; p != NULL; pre = p, p = p->next)
//    {
//        if(p->times > 1)
//            printf("%s %d\r\n", p->telno, p->times);
//        free(pre);
//    }
//}
//
//void getinput(Node** head)
//{
//    char     inputs[255];
//    char     temp[9];
//    int i = 0, n = 0;
//    Node *p = NULL, *q = NULL;
//
//    *head = NULL;
//
//    scanf("%d", &n);
//    for(i = 0; i < n; i++)
//    {
//        scanf("%s", inputs);
//        process(temp, inputs);
//
//        p = findstr(*head, temp);
//        if(p == NULL)
//        {
//            q = (Node*)malloc(sizeof(Node));
//            strcpy(q->telno, temp);
//            q->times = 1;
//
//            q->next = *head;
//            *head = q;
//        }
//        else
//        {
//            p->times++;
//        }
//
//    }
//}
//int main()
//{
//
//
//    Node *head = NULL;
//
//    getinput(&head);
//
//    //sortlist(&head);
//    sortlink(&head);
//
//    show(head);
//
//    return 0;
//}

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

#define MAX 100000

int L[MAX], R[MAX];

int		InputToDigit(char c);
void	sort(int *tab, int i, int k);
void	merge(int *tab, int i, int j, int k);

int
main()
{
	int i,k,n,number;
	int noDup = 1;
	char str[1000];
	int *table,*p,*t;

	scanf("%d", &n);

	p = table = (int *)malloc(sizeof(int)*n);

	// ½¨Á¢ºÅÂë±í
	for(i=0; i<n; i++) {
		scanf("%s", str);
		k = 0;
		number = 0;

		while(str[k]) {
			if(str[k] == '-') {
				k++;
				continue;
			}

			number *= 10;
			number += InputToDigit(str[k]);
			k++;
		}

		*p++ = number;
	}

	sort(table,0,n-1);

	// ²éÕÒºÅÂë±í
	p = table;
	while(p-table<n-1) {
		t = p;
		while(*p == *t)
			p++;

		if(p-t>1) {
			printf("%03d-%04d %ld\n",*t/10000
							,*t%10000
							,p-t);
			noDup = 0;
		}
	}

	if(noDup)
		printf("No duplicates.\n");

	return 0;
}

int
InputToDigit(char c)
{
	if(c == 'P' || c == 'R' ||c == 'S') {
		return 7;
	} else if(c >= 'A' && c <= 'O') {
		return (c - 'A')/3 + 2;
	} else if(c >= 'T' && c <= 'Y') {
		return (c - 'T')/3 + 8;
	} else if(c >= '0' && c <= '9') {
		return c -'0';
	}

	return -1;
}

void
sort(int *tab, int i, int k)
{
	int m;

	if(i<k){
		m = (i+k) / 2;
		sort(tab, i, m);
		sort(tab, m+1, k);
		merge(tab, i, m, k);
	}
}

void
merge(int *tab, int i, int j, int k)
{
	int m,n,n1,n2;
	int *p = tab + i;

	n1=j-i+1;
	n2=k-j;

	memcpy(L, tab+i, n1*sizeof(int));
	memcpy(R, tab+j+1, n2*sizeof(int));

	m=n=0;

	while(m<n1 && n<n2) {
		if(L[m] < R[n]) {
			*p++ = L[m++];
		} else {
			*p++ = R[n++];
		}
	}
	for( ; m< n1; m++) {
		*p++ = L[m];
	}
	for( ; n< n2; n++) {
		*p++ = R[n];
	}
}
